package br.edu.ufc.deti.teste;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.ValidationException;

import br.edu.ufc.deti.beans.Aplicacao;
import br.edu.ufc.deti.beans.Mensagem;
import br.edu.ufc.deti.beans.PerfClusters;
import br.edu.ufc.deti.beans.Recurso;
import br.edu.ufc.deti.beans.Requisito;
import br.edu.ufc.deti.broker.execucao.NgcExecucao;
import br.edu.ufc.deti.broker.mapeamento.ExecucaoMapping;
import br.edu.ufc.deti.broker.mapeamento.bean.PerfClustersDecorator;

public class TesteExecucao {

	public static void main(String[] args) {
		Recurso recurso = null;
		Requisito requisito = null;
		Aplicacao aplicacao = new Aplicacao();
		List<Recurso> recursostest = new ArrayList<Recurso>();
		List<Requisito> requisitostest = new ArrayList<Requisito>();
		PerfClusters perfClusters = new PerfClusters();

		//Cluster Nimbus
		recurso = new Recurso();
		recurso.setIpRecurso("128.135.125.21");
		recurso.setHostRecurso("tp-x001.ci.uchicago.edu");
		recursostest.add(recurso);
		recurso = null;

		//Cluster Unisannio
		recurso = new Recurso();
		recurso.setIpRecurso("193.206.108.132");
		recurso.setHostRecurso("powercost.rcost.unisannio.it");
		recursostest.add(recurso);
		recurso = null;


		requisito = new Requisito();
		requisito.setDscRequisito("processamento");
		requisito.setUsoRequisito(new Float(10));
		requisito.setValorMinimoRequisito(new Float(1));
		requisitostest.add(requisito);
		requisito = null;

		requisito = new Requisito();
		requisito.setDscRequisito("memoria");
		requisito.setUsoRequisito(new Float(1));
		requisito.setValorMinimoRequisito(new Float(1));
		requisitostest.add(requisito);
		requisito = null;

		requisito = new Requisito();
		requisito.setDscRequisito("rede_interna");
		requisito.setUsoRequisito(new Float(1));
		requisito.setValorMinimoRequisito(new Float(1));
		requisitostest.add(requisito);
		requisito = null;

		requisito = new Requisito();
		requisito.setDscRequisito("rede_externa");
		requisito.setUsoRequisito(new Float(100));
		requisito.setValorMinimoRequisito(new Float(1));
		requisitostest.add(requisito);
		requisito = null;
		
		
		aplicacao.setBase("drosoph.nt");
		String sequencia = ">Test"+
		"AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC"+
		"TTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAA"+
		"TATAGGCATAGCGCACAGACAGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACC"+
		"ATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAG"+
		"CCCGCACCTGACAGTGCGGGCTTTTTTTTTCGACCAAAGGTAACGAGGTAACAACCATGCGAGTGTTGAA"+
		"GTTCGGCGGTACATCAGTGGCAAATGCAGAACGTTTTCTGCGTGTTGCCGATATTCTGGAAAGCAATGCC"+
		"AGGCAGGGGCAGGTGGCCACCGTCCTCTCTGCCCCCGCCAAAATCACCAACCACCTGGTGGCGATGATTG"+
		"AAAAAACCATTAGCGGCCAGGATGCTTTACCCAATATCAGCGATGCCGAACGTATTTTTGCCGAACTTTT";
		aplicacao.setSequencia( sequencia );
		
		perfClusters.setMensagens(new ArrayList<Mensagem>());
		perfClusters.setAplicacao(aplicacao);
		perfClusters.setRecursos(recursostest);
		perfClusters.setRequisitos(requisitostest);

		
//		try {
//			PerfClustersDecorator perfClustersDecorator = new PerfClustersDecorator();
//			perfClustersDecorator.setPerfClusters(perfClusters);
//			String xml = ExecucaoMapping.getInstance().marshalPerfClusters(perfClustersDecorator);
//			System.out.println(xml);
//		} catch (MarshalException e) {
//			e.printStackTrace();
//		} catch (ValidationException e) {
//			e.printStackTrace();
//		} catch (IOException e) {
//			e.printStackTrace();
//		} catch (MappingException e) {
//			e.printStackTrace();
//		}
		
		for (int i = 0; i < 28; i++) {



		NgcExecucao execucao = new NgcExecucao( perfClusters );
		
		//Recurso recursoCloud = new Recurso();
		//recursoCloud.setIpRecurso("128.135.125.21");
//		try {
//			execucao.criaArquivoExecucaoAplicacao( aplicacao, recursoCloud );
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
		execucao.executaAplicacao_Recursos();
		
		}
	}
}
